#include <stdio.h>
#include <getopt.h>

#include "manejoDeBloques.h"

int comprobarParametros(int argc,char** argv,int* comp,int* desc,int* help){
	int compresor,descompresor,ayuda;
	int error;
	int c;

	compresor = 0;
	descompresor = 0;
	ayuda = 0;
	error = 0;

	while ((c = getopt (argc, argv, "cdh")) != -1 ){
		switch (c){
			case 'c':
               compresor=1;
               break;

			case 'd':
               descompresor=1;
               break;

			case 'h':
               ayuda=1;
               error=1;
               break;

			case '?':
               fprintf(stderr,"\nPruebe '-h' para obtener ayuda.\n");
               error = 1;
               break;

             default:
               abort();
             }
         }

		//Cantidad de parametros diferentes a la necesitada
		if (argc < 2 || argc > 4){
			error = 1;
			fprintf(stderr,"Pruebe '-h' para obtener ayuda.\n");
		}

		// Caso: argumentos incompatibles
		if(( compresor==1 &&  descompresor==1 && !error)){
			error = 1;
			fprintf(stderr,"Operandos incompatibles.\nPruebe '-h' para obtener ayuda.\n");
		}

		//Faltan operandos
		if (( argv[2]==NULL || argv[3]==NULL ) && !error) {
			error = 1;
			fprintf(stderr,"Faltan operandos. Use -h para obtener ayuda.\n");
		}

		if (error){
			compresor = 0;
			descompresor = 0;
		}

    *help=ayuda;
    *comp=compresor;
    *desc=descompresor;

    return error;
}

void mensajeDeAyuda(){
		printf("\nPara comprimir se usa:\n -c archivo1 archivo2\nDonde archivo1 es el archivo a comprimir y archivo2 es el archivo comprimido\n\n");
		printf("Para descomprimir se usa:\n -d archivo1 archivo2\nDonde archivo1 es el archivo a descomprimir y archivo2 es el archivo descomprimido\n");
	}

int main(int argc,char** argv){
	int ayuda  		  = 0;
	int comprimir	  = 0;
	int descomprimir  = 0;
	int error		  = 0;

	error = comprobarParametros(argc,argv,&comprimir,&descomprimir,&ayuda);

	if (ayuda)
		mensajeDeAyuda();

	if (comprimir)
		error = comprimirPorBloques(argv[2],argv[3]);

	if (descomprimir)
		error = descomprimirPorBloques(argv[2],argv[3]);

	if(!error)
		printf("\n\nTiempo final de ejecucion: %li ms\n",clock()/(CLOCKS_PER_SEC/1000));

	return 0;
}
